import wave
import array

class AnalisadorWave:
	def __init__(self,wavefile):
		self.wav = wavefile
		self.namostras = self.wav.getnframes()
		self.canais = self.wav.getnchannels()
		self.tamanhoAmostra = self.wav.getsampwidth()
		self.rate = self.wav.getframerate()
		self.amostras = array.array('h')
		self.amostras.fromstring(self.wav.readframes(self.namostras))
		self.media = 0
		
	def analisar(self):
		#self.indiceMaior, self.listaAmostras = self.getListaAmostras()
		self.indiceMaior = 0
		for i in range(self.namostras):
			self.media = self.media + self.amostras[i]
			if self.amostras[i] > self.amostras[self.indiceMaior]:
				self.indiceMaior = i
		self.media = self.media / self.namostras
	
	def segundoAmostra(self,nframe):
		return float(nframe)/self.rate
		
	def segundoMaiorAmostra(self):
		return self.segundoAmostra(self.indiceMaior)
		
	def segundosTotal(self):
		return float(self.namostras)/self.rate
			
	def intensidadeMaior(self):
		return self.amostras[self.indiceMaior]
		
	def intensidadeMaxima(self):
		return pow(2,(self.tamanhoAmostra*8)-1) - 1
		
	def intensidadeMinima(self):
		return pow(2,(self.tamanhoAmostra*8)-1) * (-1)
		
	def imprimeResultados(self):
		print 'Total de amostras analisadas: \t%s' % self.namostras
		print 'Tempo total: \t\t\t%s segundos ' % self.segundosTotais()
		#print 'Intensidade maxima: \t\t%s ' % self.intensidadeMaxima()
		#print 'Intensidade minima: \t\t%s ' % self.intensidadeMinima()
		print '\nAmostra com maior intensidade: \t%s' % self.indiceMaior
		print 'Instante em que ocorre: \t%s segundos' % self.segundoMaiorAmostra()
		print 'Intensidade: \t\t\t%s' % self.intensidadeMaior()
		
		
		
########################################################
###########					TESTER					###########

if __name__ == '__main__':

	anali = AnalisadorWave(wave.open('som-2.wav'))
	anali.analisar()
	anali.imprimeResultados()
	
